package co.edu.udea.herbario.dao;

import java.util.List;

import co.edu.udea.herbario.dto.Administrador;
import co.edu.udea.herbario.excepcion.Excepcion;

/**
 * Clase de tipo interface que contiene la declaracion de los metodos utilizados para gestionar
 * los datos de la tabla Administrador entre la persistencia y la logica de la aplicacion
 * 
 * @author Lorena Orozco, Alejandro Areiza, Marcela Colorado
 *
 */

public interface AdministradorDao
{	
	/**
	 * Este metodo es el encargado de entregar en una lista todos los usuarios registrados 
	 * en el sistema como administradores
	 * 
	 * @return retorna una lista de objetos tipo Administrador con todos los usuarios registrados
	 * en la tabla Administrador
	 *  
	 * @throws Excepcion
	 */
	public List<Administrador> obtenerUsuarios() throws Excepcion;
	
	/**
	 * Obtiene desde la tabla Administrador el usuario asociado al numero de identificacion
	 * indicado como parametro
	 * 
	 * @param id es un entero que hace referencia al numero de identificacion del usuario
	 * dentro del sistema
	 * 
	 * @return retorna el objeto de tipo Administrador que se encuentre asociado al numero de 
	 * identificacion indicado
	 * 
	 * @throws Excepcion
	 */
	public Administrador obtener(int id) throws Excepcion;
	
	/**
	 * Obtiene desde la tabla Administrador el usuario asociado al nombre de usuario indicado como parametro
	 * 
	 * @param userName corresonde a la cadena de caracteres que utiliza el usuario para iniciar sesion en el sistema
	 * 
	 * @return retorna un objeto de tipo Administrador
	 * 
	 * @throws Excepcion
	 */
	public Administrador obtenerUsuario(String userName) throws Excepcion;
	
	/**
	 * Permite llevar a cabo el proceso de modificacion de datos personales de un usuario 
	 * administrador registrado en el sistema
	 * 
	 * @param adm hace referencia a un objeto de la clase Administrador
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la actualizacion, de
	 * lo contrario res = -1 
	 * 
	 * @throws Excepcion
	 */
	public int actualizar(Administrador adm) throws Excepcion;
	
	/**
	 * Metodo para crear un usuario en la tabla Administrador
	 * 
	 * @param adm es un objeto de la clase Administrador
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la creacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int crear(Administrador adm) throws Excepcion;
	
	/**
	 * Metodo que deshabilita un usuario para que deje de tener validez en el sistema
	 * 
	 * @param adm es el objeto de la clase Administrador que contiene los datos del usuario
	 *  que debe ser deshabilitado en el sistema
	 *  
	 * @return retorna un entero: res = 1 si se realizo correctamente la deshabilitacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int deshabilitar(Administrador adm) throws Excepcion;
}
